package Builder; import java.util.ArrayList; import java.util.HashMap; import java.util.Map.Entry; import java.util.Set; import Command.LDrawPart; import Common.Matrix4; import Connectivity.ConnectivityTestResultT; import Connectivity.GlobalConnectivityManager; public class BrickGroupForTransform { private HashMap<LDrawPart, Matrix4> initialTransform; private ArrayList<LDrawPart> partList; public BrickGroupForTransform() { initialTransform = new HashMap<LDrawPart, Matrix4>(); partList = new ArrayList<LDrawPart>(); } public void addPart(LDrawPart part) { initialTransform.put(part, part.transformationMatrix()); partList.add(part); } public void removePart(LDrawPart part) { initialTransform.remove(part); partList.remove(part); } public void applyTransform(LDrawPart part, Matrix4 transform) { if(transform==null)return; if(initialTransform.get(part)==null)return; Matrix4 newTransform = Matrix4.multiply( Matrix4.inverse(initialTransform.get(part)), transform); for (Entry<LDrawPart, Matrix4> entry : initialTransform.entrySet()) { entry.getKey().setTransformationMatrix( Matrix4.multiply(entry.getValue(), newTransform)); } for (LDrawPart p : initialTransform.keySet()) { initialTransform.put(p, p.transformationMatrix()); } } public boolean contains(LDrawPart part) { return initialTransform.containsKey(part); } public void dispose() { initialTransform.clear(); initialTransform = null; } public void clear() { for (LDrawPart part : initialTransform.keySet()) part.isDraggingPart(false); initialTransform.clear(); partList.clear(); } public int size() { return partList.size(); } public ArrayList<LDrawPart> getPartList() { return partList; } public boolean isEmpty() { return initialTransform.isEmpty(); } public boolean isAllMovable(LDrawPart part, Matrix4 transform) { if(BuilderConfigurationManager.getInstance().isUseConnectivity()==false)return true; if(transform==null)return false; boolean isAllMovable = true; Matrix4 initialTransformMatrix = initialTransform.get(part); if(initialTransformMatrix==null)return false; Matrix4 newTransform = Matrix4.multiply( Matrix4.inverse(initialTransformMatrix), transform); GlobalConnectivityManager connectivityManager = GlobalConnectivityManager .getInstance(); isAllMovable = true; for (Entry<LDrawPart, Matrix4> entry : initialTransform.entrySet()) { if (connectivityManager.isConnectable_Exact(entry.getKey(), Matrix4.multiply(entry.getValue(), newTransform)) .getResultType() == ConnectivityTestResultT.False) { isAllMovable = false; break; } } return isAllMovable; } }